{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Logistic Regression\n",
    "\n",
    "This function shows how to use TensorFlow to solve logistic regression.\n",
    "$ \\textbf{y} = sigmoid(\\textbf{A}\\times \\textbf{x} + \\textbf{b})$\n",
    "\n",
    "We will use the low birth weight data, specifically:\n",
    "```\n",
    "#  y = 0 or 1 = low birth weight\n",
    "#  x = demographic and medical history data\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "import requests\n",
    "from tensorflow.python.framework import ops\n",
    "import os.path\n",
    "import csv"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "ops.reset_default_graph()\n",
    "\n",
    "# Create graph\n",
    "sess = tf.Session()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Obtain and prepare data for modeling"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# name of data file\n",
    "birth_weight_file = 'birth_weight.csv'\n",
    "\n",
    "# download data and create data file if file does not exist in current directory\n",
    "if not os.path.exists(birth_weight_file):\n",
    "    \n",
    "    birthdata_url = 'https://github.com/nfmcclure/tensorflow_cookbook/raw/master/01_Introduction/07_Working_with_Data_Sources/birthweight_data/birthweight.dat'\n",
    "    birth_file = requests.get(birthdata_url)\n",
    "    birth_data = birth_file.text.split('\\r\\n')\n",
    "    birth_header = birth_data[0].split('\\t')\n",
    "    birth_data = [[float(x) for x in y.split('\\t') if len(x)>=1] for y in birth_data[1:] if len(y)>=1]\n",
    "    with open(birth_weight_file, \"w\") as f:\n",
    "        writer = csv.writer(f)\n",
    "        writer.writerows(birth_data)\n",
    "        f.close()\n",
    "\n",
    "# read birth weight data into memory\n",
    "birth_data = []\n",
    "with open(birth_weight_file, newline='') as csvfile:\n",
    "     csv_reader = csv.reader(csvfile)\n",
    "     birth_header = next(csv_reader)\n",
    "     for row in csv_reader:\n",
    "         birth_data.append(row)\n",
    "\n",
    "birth_data = [[float(x) for x in row] for row in birth_data]\n",
    "\n",
    "# Pull out target variable\n",
    "y_vals = np.array([x[1] for x in birth_data])\n",
    "# Pull out predictor variables (not id, not target, and not birthweight)\n",
    "x_vals = np.array([x[2:9] for x in birth_data])\n",
    "\n",
    "# set for reproducible results\n",
    "seed = 99\n",
    "np.random.seed(seed)\n",
    "tf.set_random_seed(seed)\n",
    "\n",
    "# Split data into train/test = 80%/20%\n",
    "train_indices = np.random.choice(len(x_vals), round(len(x_vals)*0.8), replace=False)\n",
    "test_indices = np.array(list(set(range(len(x_vals))) - set(train_indices)))\n",
    "x_vals_train = x_vals[train_indices]\n",
    "x_vals_test = x_vals[test_indices]\n",
    "y_vals_train = y_vals[train_indices]\n",
    "y_vals_test = y_vals[test_indices]\n",
    "\n",
    "# Normalize by column (min-max norm)\n",
    "def normalize_cols(m):\n",
    "    col_max = m.max(axis=0)\n",
    "    col_min = m.min(axis=0)\n",
    "    return (m-col_min) / (col_max - col_min)\n",
    "    \n",
    "x_vals_train = np.nan_to_num(normalize_cols(x_vals_train))\n",
    "x_vals_test = np.nan_to_num(normalize_cols(x_vals_test))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Define Tensorflow computational graph¶"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Declare batch size\n",
    "batch_size = 25\n",
    "\n",
    "# Initialize placeholders\n",
    "x_data = tf.placeholder(shape=[None, 7], dtype=tf.float32)\n",
    "y_target = tf.placeholder(shape=[None, 1], dtype=tf.float32)\n",
    "\n",
    "# Create variables for linear regression\n",
    "A = tf.Variable(tf.random_normal(shape=[7,1]))\n",
    "b = tf.Variable(tf.random_normal(shape=[1,1]))\n",
    "\n",
    "# Declare model operations\n",
    "model_output = tf.add(tf.matmul(x_data, A), b)\n",
    "\n",
    "# Declare loss function (Cross Entropy loss)\n",
    "loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=model_output, labels=y_target))\n",
    "\n",
    "# Declare optimizer\n",
    "my_opt = tf.train.GradientDescentOptimizer(0.01)\n",
    "train_step = my_opt.minimize(loss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Train model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loss = 0.738003\n",
      "Loss = 0.593842\n",
      "Loss = 0.614028\n",
      "Loss = 0.660213\n",
      "Loss = 0.584022\n"
     ]
    }
   ],
   "source": [
    "# Initialize variables\n",
    "init = tf.global_variables_initializer()\n",
    "sess.run(init)\n",
    "\n",
    "# Actual Prediction\n",
    "prediction = tf.round(tf.sigmoid(model_output))\n",
    "predictions_correct = tf.cast(tf.equal(prediction, y_target), tf.float32)\n",
    "accuracy = tf.reduce_mean(predictions_correct)\n",
    "\n",
    "# Training loop\n",
    "loss_vec = []\n",
    "train_acc = []\n",
    "test_acc = []\n",
    "for i in range(1500):\n",
    "    rand_index = np.random.choice(len(x_vals_train), size=batch_size)\n",
    "    rand_x = x_vals_train[rand_index]\n",
    "    rand_y = np.transpose([y_vals_train[rand_index]])\n",
    "    sess.run(train_step, feed_dict={x_data: rand_x, y_target: rand_y})\n",
    "\n",
    "    temp_loss = sess.run(loss, feed_dict={x_data: rand_x, y_target: rand_y})\n",
    "    loss_vec.append(temp_loss)\n",
    "    temp_acc_train = sess.run(accuracy, feed_dict={x_data: x_vals_train, y_target: np.transpose([y_vals_train])})\n",
    "    train_acc.append(temp_acc_train)\n",
    "    temp_acc_test = sess.run(accuracy, feed_dict={x_data: x_vals_test, y_target: np.transpose([y_vals_test])})\n",
    "    test_acc.append(temp_acc_test)\n",
    "    if (i+1)%300==0:\n",
    "        print('Loss = ' + str(temp_loss))\n",
    "        "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Display model performance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nDNKLgoZsB/2uFYT1KfgRkaxcaEchSu0j6gikuMXDS//NN9/kyCOPjDWvOAlr/vKaENevXx/LtYzz\n/syZM4e77747tvRz5eeffwZg6dKlJbbEgPQdza1F5D6cWoG3jfu7VjrEi9LRDNG+7LMhSnqeu+2o\nFLLN/9tvv6VVq1bUr18/af/776e2OtZ84hYFjzj6ZHr16sW0adM49dRT2WGH8nmFg3x9GaUjXU3h\nzziO8Cb5tr3fV8ZvWvkRpaYAhReFKG2tUQuRQr94K1euZOedd+bCCy+MFP7GG29ERHj//ffztmX+\n/Plce+21sbgDCbOtHGoKP//8M6eddhpLlixJG+6BB5K7/rwv8kI/n/liolBehIqCqj6W7q+YRpYL\nXoHgFdJhD3G7du1C0zjzzDOzzjfKS5xOFLbddluGDx8eOXxUqqqqEivIjRs3Dsj8Yt95550A9OzZ\nk2eeeSav/M8991xuueUW3nvvvbzSCcI7j9TzKYeawj333MMzzzzDPffckzaNSy65JDDNcit8y3Wk\n2qpVq/j6668jhZ0+fTrTpk2L2aLiEOv4SRE5RkS+EJGvReTqgOONReRlEZkqItNF5Lw47cmXFi1a\nAHDMMcck7U99qNu2bcuQIUP461//mrR/1apVdOvWLet886kpqCqLFy+OZYLbgw8+mFe6+c66XbNm\nDRCP40AvzdQC1JvVHrcoREk728K0kIXvunXrCnbdSylWDz30EM8//3zgsT59+tC+fftI6XTs2JG9\n9tqrkKaVjNhEQUQqgPuBY4EOwOkikjrN8hLgM1XdGzgEuFNE6sVlU740b96cefPm8be//S1j2EGD\nBlVbcnPLLbekT58+Wec7ePDgjGH8L/y4ceNo0KABCxYsiPziVlVVMWbMmKxe9O+++67avkwvdim/\nCu+9996kIb3pCDsPb3/copAOL99cr2U2do8aNYpbb7212v769etzzjnn5JR/Kt55lMIrcP/+/Tnl\nlFMCj7322mtA+dWs4ibOmsK+wNeq+o2qrgOeBk5MCaPA1uI8FVsBi4GyHqzcqlWrvFxZtG3bNus4\nDz30UMYw/gLijjvuYPXq1bRs2TLpRXv99ddDH/CRI0fSp08fHnnkkch25fuyZCrUVq1axa233pqx\nppTJDlXlzTffZMCAAfzyl7+MZFtYAeXt//LLL+nfv39i/xtvvBEp3aikuza5ikJq+BUrVnDccccx\n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\ngv8H8rL3IgfYk9UAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x11033b4e0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1005cd400>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot loss over time\n",
    "plt.plot(loss_vec, 'k-')\n",
    "plt.title('Cross Entropy Loss per Generation')\n",
    "plt.xlabel('Generation')\n",
    "plt.ylabel('Cross Entropy Loss')\n",
    "plt.show()\n",
    "\n",
    "# Plot train and test accuracy\n",
    "plt.plot(train_acc, 'k-', label='Train Set Accuracy')\n",
    "plt.plot(test_acc, 'r--', label='Test Set Accuracy')\n",
    "plt.title('Train and Test Accuracy')\n",
    "plt.xlabel('Generation')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.legend(loc='lower right')\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
